package com.magical.util;

import org.omg.Dynamic.Parameter;

import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 工具类
 */
public class MyUtil {
    /**
     * 生成文件的id
     * @param fileName 文件名
     * @return  生成的id
     */
    public static String generateFileId(String fileName){
        String uuid=UUID.randomUUID().toString().replace("-", "");
        return uuid;
    }

    /**
     * 返回分享链接的id
     * @param fileId  分享文件的id
     * @return 链接的id
     */
    public static String generateShareId(String fileId){
        String uuid=UUID.randomUUID().toString().replace("-", "");
        return uuid+"-"+fileId;
    }

    /**
     * 自动重命名文件，如果文件名重复的话
     * @param fileNames 当前目录下的所有文件名
     * @param originalName 此文件的原始文件名
     * @return 重命名后的文件名
     */
    public static String autoRenameFile(String[] fileNames,String originalName){
        if(fileNames==null||fileNames.length==0)
            return originalName;
        for(int i=0;i<fileNames.length;i++){
            //发现相同的文件名
            if(originalName.equals(fileNames[i])){
                break;
            }
            //最后也未发现重命名的文件，直接返回原文件名
            if(i==fileNames.length-1){
                return originalName;
            }
        }
        /*  发现重复名文件  */
        int maxNum=1;
        boolean isFolder;           //判断是否是文件夹
        String fileName="n";        //小数点前面的文件名
        String type="t";            //小数点后面的文件后缀

        //尝试分割文件名和文件后缀以判定是文件还是文件夹
        Pattern pattern=Pattern.compile("^(.*)\\.(\\w+)$");
        Matcher matcher=pattern.matcher(originalName);
        if(matcher.find()){
            /*
              是文件类型，分割文件名和后缀
             */
            fileName=matcher.group(1);
            type=matcher.group(2);
            isFolder=false;
            //构建正则，寻找这个文件名
            pattern=Pattern.compile(fileName+"\\((\\d+)\\)\\.\\w+$");
        }else{
            /*
             是文件夹类型（这里的文件夹是没有小数点的，如果文件夹名有小数点，就判成文件类型好了
             例如 3.22 ，重命名后为3(1).22 ，效果一样
             */
            isFolder=true;
            //构建正则，寻找这个文件夹名
            pattern=Pattern.compile(originalName+"\\((\\d+)\\)$");

        }
        //查找文件
        for(String name:fileNames){
            matcher=pattern.matcher(name);
            if(matcher.find()){
                String n= matcher.group(1);
                int num=0;
                try {
                    num = Integer.parseInt(n)+1;    //将值加一
                }catch (Exception ignored){}
                if(num>maxNum)
                    maxNum=num;
            }
        }
        if(isFolder){
            return originalName+"("+maxNum+")";
        }else{
            return fileName+"("+maxNum+")."+type;
        }

    }
}
